using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using Koala.KoalaWebControls;

public partial class ACT_ACT_ACTIVO_ARCHIVO : PaginaBaseKCG
{
    private FileUpload _fulOrigenDocumento;
    private bool _guardarFichero = false;
    private string _idActActivoArchivo = string.Empty;

    protected override CheckBox CbInsertarMemoria
    {
        get { return null; }
    }

    protected override Type TipoObjeto
    {
        get { return typeof (Act_Activo_Archivo); }
    }

    protected override GridView Gv
    {
        get { return grvActActivoArchivo; }
    }

    protected override FormView Fv
    {
        get { return frvActActivoArchivo; }
    }

    protected override ObjectDataSource OdsGv
    {
        get { return odsGrvActActivoArchivo; }
    }

    protected override ObjectDataSource OdsDv
    {
        get { return odsFrvActActivoArchivo; }
    }

    protected override Button BResponderZoom
    {
        get { return null; }
    }

    protected override Button BRegreso
    {
        get { return null; }
    }

    protected override KFiltro KftFiltro
    {
        get { return null /*kftFiltro*/; }
    }

    protected override string Contenedor
    {
        get { return "ACT_ACTIVO_ARCHIVO"; }
    }

    protected void nav_Siguiente(object sender, EventArgs e)
    {
        Gv_SelectedIndexChanged(sender, e);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        base.Page_Load(sender, e);
        
        odsFrvActActivoArchivo.Inserting += new ObjectDataSourceMethodEventHandler(odsFrvActActivoArchivo_Inserting);
        odsFrvActActivoArchivo.Inserted += new ObjectDataSourceStatusEventHandler(odsFrvActActivoArchivo_Inserted);
        frvActActivoArchivo.DataBound += new EventHandler(frvActActivoArchivo_DataBound);

        odsFrvActActivoArchivo.Deleting += new ObjectDataSourceMethodEventHandler(odsFrvActActivoArchivo_Deleting);
        odsFrvActActivoArchivo.Deleted += new ObjectDataSourceStatusEventHandler(odsFrvActActivoArchivo_Deleted);

        odsFrvActActivoArchivo.Updating += new ObjectDataSourceMethodEventHandler(odsFrvActActivoArchivo_Updating);
        //odsFrvActActivoArchivo.Updated += new ObjectDataSourceStatusEventHandler(odsFrvActActivoArchivo_Updated);
        frvActActivoArchivo.ItemUpdated += new FormViewUpdatedEventHandler(frvActActivoArchivo_ItemUpdated);

        Btn_Act_Activo_Archivo_Activo.Click += new EventHandler(Btn_Act_Activo_Archivo_Activo_Click);

    }

    void Btn_Act_Activo_Archivo_Activo_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/ACT/ACT_ACTIVO.aspx" +
            "?Act_Activo_Id=" + Request.QueryString["Act_Activo_Id"] +
            "&Act_Activo_Codigo=" + Request.QueryString["Act_Activo_Codigo"] +
            "&Act_Activo_Nombre=" + Request.QueryString["Act_Activo_Nombre"]);
    }

    void frvActActivoArchivo_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
    {
        if (e.Exception == null || e.AffectedRows == 1)
        {
            BorrarArchivo(_pathBorrar);

            if (_fulOrigenDocumento.HasFile)
            {
                _guardarFichero = true;
                _idActActivoArchivo = e.NewValues["Id"].ToString();
            }
        }
    }



    void odsFrvActActivoArchivo_Updating(object sender, ObjectDataSourceMethodEventArgs e)
    {
        List<DictionaryEntry> parametros = (List<DictionaryEntry>)e.InputParameters["parametros"];
        _fulOrigenDocumento = (FileUpload)Fv.FindControl("fulOrigenDocumento");
        if (_fulOrigenDocumento.HasFile)
        {
            parametros[BuscarParametro(parametros, "Origen_Documento")] =
                new DictionaryEntry("Origen_Documento", _fulOrigenDocumento.PostedFile.FileName);

            parametros[BuscarParametro(parametros, "Nombre")] =
                new DictionaryEntry("Nombre", _fulOrigenDocumento.FileName);

            string extensionFichero = Path.GetExtension(_fulOrigenDocumento.FileName);
            parametros[BuscarParametro(parametros, "Extension")] =
                new DictionaryEntry("Extension", extensionFichero);

            _pathBorrar = ((TextBox)Fv.FindControl("Path_Archivo")).Text;
        }

    }

    void odsFrvActActivoArchivo_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        if(e.Exception == null || e.AffectedRows == 1)
        {
            BorrarArchivo(_pathBorrar);
        }
    }

    void BorrarArchivo(string path)
    {
        try
        {
            File.Delete(Server.MapPath(path));
        }
        catch
        { }
    }



    private string _pathBorrar = string.Empty;

    void odsFrvActActivoArchivo_Deleting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        _pathBorrar = ((TextBox) Fv.FindControl("Path_Archivo")).Text;
    }

    private void frvActActivoArchivo_DataBound(object sender, EventArgs e)
    {
        if (_guardarFichero && Fv.CurrentMode == FormViewMode.ReadOnly)
        {
            //Control ctrPathArchivo = Fv.FindControl("Path_Archivo");
            string strServerPath = ((TextBox)Fv.FindControl("Path_Archivo")).Text;
            string extension = Path.GetExtension(Server.HtmlEncode(_fulOrigenDocumento.FileName));
            string nombreFichero = _idActActivoArchivo + extension;
            strServerPath = strServerPath.Replace(nombreFichero, "");
            DirectoryInfo serverPath = new DirectoryInfo(Server.MapPath(strServerPath));
            string path = serverPath.FullName + nombreFichero;
            _fulOrigenDocumento.SaveAs(path);
        }
    }


    private void odsFrvActActivoArchivo_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
    {
        // Se insertan los parametros correspondientes al archivo UpLoad

        List<DictionaryEntry> parametros = (List<DictionaryEntry>) e.InputParameters["parametros"];
        _fulOrigenDocumento = (FileUpload) Fv.FindControl("fulOrigenDocumento");
        if (_fulOrigenDocumento.HasFile)
        {
            parametros[BuscarParametro(parametros, "Origen_Documento")] =
                new DictionaryEntry("Origen_Documento", _fulOrigenDocumento.PostedFile.FileName);

            parametros[BuscarParametro(parametros, "Nombre")] =
                new DictionaryEntry("Nombre", _fulOrigenDocumento.FileName);

            string extensionFichero = Path.GetExtension(_fulOrigenDocumento.FileName);
            parametros[BuscarParametro(parametros, "Extension")] =
                new DictionaryEntry("Extension", extensionFichero);
        }
    }

    private void odsFrvActActivoArchivo_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        if (e.Exception == null && _fulOrigenDocumento.HasFile)
        {
            _guardarFichero = true;
            _idActActivoArchivo = e.ReturnValue.ToString();
        }
    }

    private int BuscarParametro(List<DictionaryEntry> parametros, string key)
    {
        for (int i = 0; i < parametros.Count; i++)
        {
            if (parametros[i].Key.ToString() == key)
                return i;
        }
        return -1;
    }

    protected override void DefinirParametrosFijosDeInsercion(List<DictionaryEntry> param)
    {
        // Para el sistema
        param.Add(new DictionaryEntry("Act_Activo_Id", Request.QueryString["Act_Activo_Id"]));
        
        //Para el usuario
        param.Add(new DictionaryEntry("Act_Activo_Codigo", Request.QueryString["Act_Activo_Codigo"]));
        param.Add(new DictionaryEntry("Act_Activo_Nombre", Request.QueryString["Act_Activo_Nombre"]));

        base.DefinirParametrosFijosDeInsercion(param);
    }

    protected void Btn_act_Activo_Archivo_Obtener_Click(object sender, EventArgs e)
    {
        string archivo = ((TextBox)Fv.FindControl("Path_Archivo")).Text;
        string filepath = Server.MapPath(archivo);
        FileInfo file = new FileInfo(filepath);
        
        
        if (file.Exists)
        {
            Response.ClearContent();
            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
            Response.AddHeader("Content-Length", file.Length.ToString());
            Response.ContentType = ReturnExtension(file.Extension.ToLower());
            Response.TransmitFile(file.FullName);
            Response.End();
        }
    }

    private string ReturnExtension(string fileExtension)
    {
        switch (fileExtension)
        {
            case ".htm":
            case ".html":
            case ".log":
                return "text/HTML";
            case ".txt":
                return "text/plain";
            case ".doc":
                return "application/ms-word";
            case ".tiff":
            case ".tif":
                return "image/tiff";
            case ".asf":
                return "video/x-ms-asf";
            case ".avi":
                return "video/avi";
            case ".zip":
                return "application/zip";
            case ".xls":
            case ".csv":
                return "application/vnd.ms-excel";
            case ".gif":
                return "image/gif";
            case ".jpg":
            case "jpeg":
                return "image/jpeg";
            case ".bmp":
                return "image/bmp";
            case ".wav":
                return "audio/wav";
            case ".mp3":
                return "audio/mpeg3";
            case ".mpg":
            case "mpeg":
                return "video/mpeg";
            case ".rtf":
                return "application/rtf";
            case ".asp":
                return "text/asp";
            case ".pdf":
                return "application/pdf";
            case ".fdf":
                return "application/vnd.fdf";
            case ".ppt":
                return "application/mspowerpoint";
            case ".dwg":
                return "image/vnd.dwg";
            case ".msg":
                return "application/msoutlook";
            case ".xml":
            case ".sdxl":
                return "application/xml";
            case ".xdp":
                return "application/vnd.adobe.xdp+xml";
            default:
                return "application/octet-stream";
        }
    }
}